package leetcode.数学;

/**
 * 罗马数字转整数
 */
public class Test13罗马数字转整数 {

    /*
    遍历每一个罗马数字，然后匹配该罗马数字表示的整数是多少
    然后累加遍历的结果

    但是会遇到特殊情况，这时就需要减去超量的数据
     */
    public static int romanToInt(String s) {
        if (s == null || s == "") {
            return 0;
        }
        char[] c = s.toCharArray();
        int sum = 0;
        for (int i = 0; i < c.length; i++) {
            switch (c[i]) {
                case 'I': {
                    sum += 1;
                    break;
                }
                case 'V': {
                    sum += 5;
                    // i > 0 防止 c[i - 1] 里面的 i=-1，导致越界
                    if (i > 0 && c[i - 1] == 'I') {
                        sum -= 2; //IV是4（V前面有I），但是I + V应该是1+5=6，多了2，要减去这个2
                    }
                    break;
                }
                case 'X': {
                    sum += 10;
                    // 同理，IX 是 9 ，如果 X 的左边真的是 I，则需要再减 2
                    if (i > 0 && c[i - 1] == 'I') {
                        sum -= 2;
                    }
                    break;
                }
                case 'L': {
                    sum += 50;
                    if (i > 0 && c[i - 1] == 'X') {
                        sum -= 20;
                    }
                    break;
                }
                case 'C': {
                    sum += 100;
                    if (i > 0 && c[i - 1] == 'X') { // 如果输入的是CD，一开始检测C，他的下标是0，不判断i的合法范围不行0-1=-1：越界了
                        sum -= 20;
                    }
                    break;
                }
                case 'D': {
                    sum += 500;
                    if (i > 0 && c[i - 1] == 'C') {
                        sum -= 200;
                    }
                    break;
                }
                case 'M': {
                    sum += 1000;
                    if (i > 0 && c[i - 1] == 'C') {
                        sum -= 200;
                    }
                    break;
                }
                default:
                    break;
            }
        }
        return sum;
    }

    public static void main(String[] args) {
        System.out.println(romanToInt("CD"));
    }
}
